﻿using dotnet_ef_admin.Src.Models;
using dotnet_ef_admin.Src.Services;
using Microsoft.AspNetCore.Mvc;

namespace dotnet_ef_admin.Src.Controllers;

[Route("/api/v1/[controller]")] // 路由：api/v1/users
[ApiController] // 标记控制器为Api控制器
public class UserController(IUserService _userService) : ControllerBase {
    // private readonly IUserService _userService;

    // /// <summary>
    // /// 构造函数，用于依赖注入UserService。
    // /// </summary>
    // /// <param name="userService">用户服务的实例。</param>
    // public UserController(IUserService userService) {
    //     _userService = userService;
    // }

    /// <summary>
    ///     获取所有用户。
    /// </summary>
    /// <returns>用户列表。</returns>
    [HttpGet("page")]
    public async Task<ActionResult<IEnumerable<User>>> GetUsers() {
        var users = await _userService.GetAllUsersAsync();
        return Ok(users);
    }

    /// <summary>
    ///     获取指定ID的用户。
    /// </summary>
    /// <param name="id">用户ID。</param>
    /// <returns>用户实例。</returns>
    [HttpGet("{id}")]
    public async Task<ActionResult<FindFormResult>> FindForm(int id) {
        var result = await _userService.FindFormAsync(id);
        return Ok(result);
    }

    /// <summary>
    ///     创建新用户。
    /// </summary>
    /// <param name="request">用户实例。</param>
    /// <returns>创建的用户实例。</returns>
    [HttpPost]
    public async Task<ActionResult<User>> PostUser(CreateUserRequest request) {
        var newUser = await _userService.CreateUserAsync(request);
        return Ok(newUser);
    }

    /// <summary>
    ///     更新指定ID的用户。
    /// </summary>
    /// <param name="id">用户ID。</param>
    /// <param name="user">用户实例。</param>
    /// <returns>更新后的用户实例。</returns>
    [HttpPut("{id}")]
    public async Task<IActionResult> PutUser(int id, UpdateUserRequest user) {
        if (id != user.Id) return BadRequest();

        await _userService.UpdateUserAsync(id, user);
        return Ok("修改成功");
    }

    /// <summary>
    ///     根据ID批量删除用户。
    /// </summary>
    /// <param name="ids">要删除的用户ID，多个ID用逗号分隔。</param>
    /// <returns>删除成功时返回200 OK响应和成功消息。</returns>
    [HttpDelete("{ids}")]
    public async Task<IActionResult> DeleteMany([FromRoute] string ids) {
        // 将传入的字符串ids（比如"2,3"）转换为整数数组
        var idArray = ids.Split(',').Select(int.Parse).ToArray();

        // 调用删除方法，批量删除用户
        await _userService.DeleteManyAsync(idArray);

        // 返回删除成功的消息
        return Ok("删除成功");
    }

    /// <summary>
    ///     修改指定ID的用户密码。
    /// </summary>
    /// <param name="id">要修改密码的用户ID。</param>
    /// <param name="request">包含新密码信息的请求对象。</param>
    /// <returns>修改密码成功时返回200 OK响应和成功消息。</returns>
    [HttpPatch("{id:int}/password")]
    public async Task<IActionResult> ChangePassword(int id, UpdatePasswordRequest request) {
        // 调用修改密码的方法
        await _userService.UpdatePasswordAsync(id, request);
        // 返回修改密码成功的消息
        return Ok("修改密码成功");
    }
}
